package map;

import java.util.HashMap;
import java.util.Map;

/**
 * java.util.Map 查找表  是JAVA集合框架(Java Collections Framework)的一员
 * Map本身是一个接口，这种结构体现出来是一个多行两列的表格，其中左列称为key，右列称为value
 * Map总是根据key获取对应的value。
 *
 * 常用实现类:java.util.HashMap 散列表，哈希表
 * HashMap是使用散列算法实现的Map，当今查询速度最快的数据结构。
 */
public class MapDemo {
    public static void main(String[] args) {
        Map<String,Integer> map = new HashMap<>();
        map.put("语文",120);
        map.put("数学",135);
        map.put("英语",135);
        map.put("物理",100);
        map.put("生物",85);
        map.put("地理",85);
        System.out.println(map);//{物理=100, 生物=85, 数学=135, 语文=120, 英语=135, 地理=85}

        /*
            V put(K k,V v)
            将一组键值对存入Map中。
            Map有一个特点:Key不允许重复！！！(key的equals决定是否为重复的key)
            如果使用重复的key来put元素，则是替换value操作。此时方法返回值为被替换的value
            否则为null.
         */
        //如果Map的value是一个包装类类型，获取时不要用基本类型接收避免因为自动拆箱导致空指针
        map.put("语文",125);
        System.out.println(map);//{物理=100, 生物=85, 数学=135, 语文=125, 英语=135, 地理=85}

        /*
            int size()
            返回当前Map中键值对的个数
         */
        System.out.println("size:" + map.size());//6

        /*
            V get(Object key)
            根据给定的key获取对应的value，如果给定的key在Map中不存在则返回值为null
         */
        Integer value = map.get("物理");
        System.out.println("物理:" + value);//物理:100
        value = map.get("历史");
        System.out.println("历史:" + value);//历史:null

        /*
            V remove(K k)
            根据给定的key删除Map中这组键值对。返回值为这个key对应的value。
         */
        value = map.remove("地理");
        System.out.println(map);//{物理=100, 生物=85, 数学=135, 语文=125, 英语=135}
        System.out.println(value);//85
        value = map.remove("历史");
        System.out.println(value);//null

         /*
            boolean containsKey(Object key)
            判断当前Map是否包含给定的key
            boolean containsValue(Object value)
            判断当前Map是否包含给定的value
            这里判断包含是依靠equals方法判断的。
         */
        boolean ck = map.containsKey("数学");
        boolean cv = map.containsValue(100);
        System.out.println("包含key:"+ck);//包含key:true
        System.out.println("包含value:"+cv);//包含value:true
    }
}
